www.gusucode.com > 基于matlab编程空间复用空时码的仿真程序源码 > 基于matlab编程空间复用空时码的仿真程序源码/2Tx,2Rx,Spatial Multiplex/addAWGN_2x2.m

    function addAWGN_2x2(awgnparams,NoiseVar)

randn('state',sum(100*clock));

% --------Add Noise to Rx Antenna 1-----------
awgnipfid_rx1 = fopen(awgnparams.rx1_infile, 'r');      % open awgn input file
if awgnipfid_rx1 <= 0
   error('unable to open awgn Rx 1 input file');
end

awgnopfid_rx1 = fopen(awgnparams.rx1_outfile, 'a');     % open channel output file,append to save different dB data
if awgnopfid_rx1 < 0
   error('unable to open awgn Rx 1 output file');
end

for frm=1:awgnparams.numframe
    [awgnInData, datalen] = fread(awgnipfid_rx1, 2*awgnparams.cohtime, 'float32');
    if datalen~=2*awgnparams.cohtime, frm,error('fread awgn Rx 1 input data error!'); end
    awgnInData =  [ 1 1j ] * reshape(awgnInData, 2, datalen/2);
    Len = datalen/2;
    
    Addnoise = sqrt(NoiseVar)*sqrt(1/2)*(randn(1,Len)+j*randn(1,Len));
    awgnOutData=awgnInData+Addnoise;
    
    fwrite(awgnopfid_rx1, [real(awgnOutData);imag(awgnOutData)], 'float32');
end

fclose(awgnipfid_rx1);
fclose(awgnopfid_rx1);

% --------Add Noise to Rx Antenna 2-----------
awgnipfid_rx2 = fopen(awgnparams.rx2_infile, 'r');      % open awgn input file
if awgnipfid_rx2 <= 0
   error('unable to open awgn Rx 2 input file');
end

awgnopfid_rx2 = fopen(awgnparams.rx2_outfile, 'a');     % open channel output file,append to save different dB data
if awgnopfid_rx2 < 0
   error('unable to open awgn Rx 2 output file');
end

for frm=1:awgnparams.numframe
    [awgnInData, datalen] = fread(awgnipfid_rx2, 2*awgnparams.cohtime, 'float32');
    if datalen~=2*awgnparams.cohtime, frm,error('fread awgn Rx 2 input data error!'); end
    awgnInData =  [ 1 1j ] * reshape(awgnInData, 2, datalen/2);
    Len = datalen/2;
    
    Addnoise = sqrt(NoiseVar)*sqrt(1/2)*(randn(1,Len)+j*randn(1,Len));
    awgnOutData=awgnInData+Addnoise;
    
    fwrite(awgnopfid_rx2, [real(awgnOutData);imag(awgnOutData)], 'float32');
end

fclose(awgnipfid_rx2);
fclose(awgnopfid_rx2);